/*
 * detalhes de utilização: 
 *http://www.ibm.com/developerworks/br/library/os-javapdf/
 * 
 * http://www.forumweb.com.br/artigo/223/java/usando-a-api-itext-para-gerar-documentos-pdf-em-java
 */
package br.com.GUI.relatorio;

/**
 *
 * @author Levi&Mara
 */
import br.com.classes.RelLivroCaixa;
import br.com.dao.RelatorioDao;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class SegundoPDF {
  
    int cont = 0;
     /**
     * Add a header table to the document
     * @param document The document to which you want to add a header table
     * @param day The day that needs to be shown in the header table
     * @param page The page number that has to be shown in the header
     * @return the height of the resulting header table
     * @throws DocumentException
     */

    // String datai, dataf;
  // SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
   RelatorioDao rl = new RelatorioDao();  
    ArrayList<RelLivroCaixa> listarel = null;
    Double saldo = null;
 
    public void main(int cod, String dataini, String datafim, String nome) throws Exception {
           
        Document doc = null;
        OutputStream os = null;
        String NomeArquivo ="";   
        
        //SimpleDateFormat formatoBanco = new SimpleDateFormat("yyyy-MM-dd"); 
          
         listarel = (ArrayList<RelLivroCaixa>) rl.RelatorioPDF(cod, dataini, datafim);            
      
for (int i = 0; i < listarel.size(); i++) {  
   if(i==0){
         saldo = listarel.get(i).getSaldoini();  
       //i = listarel.size();  
   }
}       
        try {    
            //cria o documento tamanho A4, margens de ~1,25cm
            doc = new Document(PageSize.A4, 35, 35, 20, 20);
           
            //Pega a data e hora atual para colocar-mos no nome no arquivo
            Date data = new Date(System.currentTimeMillis());
            SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
            SimpleDateFormat formatoBanco = new SimpleDateFormat("yyyy-MM-dd");
            
            String DataAtual = formato.format(data);
            Date Datainicial = formatoBanco.parse(dataini);
            Date Datafinal = formatoBanco.parse(datafim);

            String a = formato.format(Datainicial);
            String b = formato.format(Datafinal);
                        
            SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy–hh-mm-ss");       
            
            NomeArquivo = dateFormat.format( new Date())+ "-MovCliente.pdf";
            
            //criando um diretorio Unirc Arquivos caso ele nao exista
            File dir = new File("C:\\Unirc Arquivos\\");
            if(dir.mkdir()){
            System.out.print("Diretorio criado com sucesso");
            }else{
            System.out.print("Erro ao criar Diretorio");
            }

            //cria a stream de saída
            os = new FileOutputStream("C:\\Unirc Arquivos\\"+NomeArquivo);
          
            //associa a stream de saída ao
            PdfWriter.getInstance(doc, os);
            //System.out.println(" 4");
            //abre o documento
            doc.open();

            //adiciona paragrafo texto ao PDF
 Font FonteTabelaCabecalho = new Font(FontFamily.HELVETICA, 8, Font.BOLD, BaseColor.BLACK);
 Font FonteTitulo = new Font(FontFamily.HELVETICA, 10, Font.BOLD, BaseColor.BLACK);  
 Font FonteTituloPeq = new Font(FontFamily.HELVETICA, 8, Font.NORMAL, BaseColor.BLACK); 

 PdfPTable table=new PdfPTable(4);
 table.setWidthPercentage(100);
 table.getDefaultCell().setBorderColor(BaseColor.WHITE);
 table.getDefaultCell().setColspan(4);
 table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
 table.getDefaultCell().setPadding (5.0f);
 table.addCell(new Phrase(nome, FonteTitulo));
 table.addCell(new Phrase("LISTAGEM DO MOVIMENTO DO CLIENTE", FonteTabelaCabecalho));
 table.getDefaultCell().setColspan(4);
 table.getDefaultCell().setPadding (2.0f);
 table.addCell(new Phrase("CODIGO: "+cod+" - FORNECEDOR: "+nome+"     Saldo Anterior de: "+saldo, FonteTabelaCabecalho));
  table.getDefaultCell().setColspan(1);
 table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);//  alinha á direita
 table.addCell(new Phrase("Data Atual: "+DataAtual, FonteTituloPeq));
  table.getDefaultCell().setColspan(2);
    table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);//  alinha á direita
 table.addCell(new Phrase("MOVIMENTO: "+1, FonteTituloPeq));
  table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);//  alinha á direita
 table.addCell(new Phrase("Periodo: "+a+" a "+b+1, FonteTituloPeq));
 table.getDefaultCell().setColspan(2);
 table.addCell("");
 doc.add(table);
                       
            //adiciona paragrafo em branco ao PDF
            Paragraph pb = new Paragraph("");
            doc.add(pb);

            //Gerando tabela
            PdfPTable tabela = new PdfPTable(new float[] { 1, 6, 1, 1, 1 }); //iniciando uma tabela com a qtde de colunas dela
            tabela.setWidthPercentage(100);
       
           //PdfPCell header = new PdfPCell(new Paragraph("Membros do gruppo KauSoftware"));
           //header.setColspan(5);
           //tabela.addCell(header);
            
            tabela.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);// centraliza o conteudo horizontalmente
            tabela.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
            tabela.getDefaultCell().setFixedHeight(15f); // altura da celula
            tabela.getDefaultCell().setBorderColor(BaseColor.LIGHT_GRAY);
            
            tabela.addCell(new Phrase("Data", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Historico", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Entrada", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Saida", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Saldo", FonteTabelaCabecalho));
            
            tabela.getDefaultCell().setBorderWidth(0.5f);
            tabela.getDefaultCell().setFixedHeight(12f);// altura da celula do corpo da tabela
            Font FonteTabela = new Font(FontFamily.HELVETICA, 7, Font.NORMAL, BaseColor.BLACK);
            int c = 1;
            
            for (RelLivroCaixa m: listarel){
            
            saldo = m.getSaldoini();
            if ( c>60){
            
            doc.add(tabela);
                
            doc.add(table);
            tabela.deleteBodyRows();
            tabela.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);// alinha a esquerda
            tabela.addCell(new Phrase("Data", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Historico", FonteTabelaCabecalho));
            tabela.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);//  alinha á direita
            tabela.addCell(new Phrase("Entrada", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Saida", FonteTabelaCabecalho));
            tabela.addCell(new Phrase("Saldo", FonteTabelaCabecalho));
            
            tabela.getDefaultCell().setBorderWidth(0.5f);
            tabela.getDefaultCell().setFixedHeight(12f);// altura da celula do corpo da tabela
            c=1;
                      }
                
            // RelatorioDao rdao = new RelatorioDao();
            //List<Movimento> ListarMovimento = mdao.ListarMovCaixa();
            //List<Relatorio> mlista = rdao.RelatorioPDF();
            //for(RelLivroCaixa m: mlista){
                    
            tabela.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);// alinha a esquerda
            tabela.addCell(new Phrase(m.getData_mov().toString(), FonteTabela));
            tabela.addCell(new Phrase(m.getMov_historico(), FonteTabela));
            tabela.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);//  alinha á direita
            tabela.addCell(new Phrase(m.getCredito().toString(),FonteTabela));
            tabela.addCell(new Phrase(m.getDebito().toString(), FonteTabela));
            tabela.addCell(new Phrase(m.getSaldo().toString(), FonteTabela));
            c++;
                 //}
            }

            doc.add(tabela);

        } finally {
            if (doc != null) {
                //fechamento do documento
                doc.close();
            }
            if (os != null) {
                //fechamento da stream de saída
                os.close();
            }              
            
        }
        //Para abrir o arquivo PDF
        
        // verificando se existe um diretorio chamado UnircArc 
       
       
        
       // String comando = ""+NomeArquivo;

        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler C:\\Unirc Arquivos\\"+NomeArquivo);               
    
    }
    }